//
//  WmcSanitationTemplateView.swift
//  YPWatermarkCamera
//
//  Created by 赵新 on 2022/4/8.
//

import UIKit

/// 环卫水印
class WmcSanitationTemplateView: WmcBaseWatermarkTemplateView {
    lazy var hourTimeLabel: WmcDateLabel = {
        let label = WmcDateLabel.YP.Create(font: 9.yp.uiFont(weight: .medium),
                                           color: UIColor.white,
                                           alignment: .center)
        label.leftEdge = 0
        label.format = .yyyy_MM_dd
        return label
    }()

    lazy var ampmTimeLabel: WmcDateLabel = {
        let label = WmcDateLabel.YP.Create(font: 24.yp.uiFont(weight: .bold),
                                           color: UIColor.white,
                                           alignment: .center)
        label.leftEdge = 0
        label.format = .zh_ampm
        label.leftEdge = 0
        label.textAlignment = .center
        return label
    }()

    lazy var leftLineView: UIView = {
        let view = UIView()
        view.backgroundColor = .wmc_yellow_FFC400
        return view
    }()

    lazy var rightLineView: UIView = {
        let view = UIView()
        view.backgroundColor = .wmc_yellow_FFC400
        return view
    }()

    lazy var centerLineView: UIView = {
        let view = UIView()
        view.backgroundColor = .wmc_green_007F46
        return view
    }()

    lazy var lineView: UIView = {
        let view = UIView()
        view.backgroundColor = .wmc_yellow_FFC400
        return view
    }()

    lazy var timeBgView: UIView = {
        let view = UIView()
        view.backgroundColor = .white.yp.alpha(0.1)
        return view
    }()

    override func config() {
        super.config()
        defaultWidth = 225.wmc_autoHor

        backgroundColorView.layer.cornerRadius = 4
        backgroundColorView.layer.masksToBounds = true
        backgroundColorView.backgroundColor = .wmc_green_029855
        addSubview(backgroundColorView)

        titleLabel.font = 17.yp.uiFont(weight: .bold)
        titleLabel.textAlignment = .center
        addSubview(titleLabel)

        addSubview(leftLineView)

        addSubview(rightLineView)

        addSubview(centerLineView)

        addSubview(timeBgView)

        timeBgView.addSubview(ampmTimeLabel)

        timeLabel.font = 24.yp.uiFont(weight: .bold)
        timeLabel.leftEdge = 0
        timeLabel.format = .HH_mm
        timeLabel.textAlignment = .center
        timeLabel.textColor = .white
        timeBgView.addSubview(timeLabel)

        timeBgView.addSubview(lineView)

        stackView.axis = .vertical
        stackView.distribution = .equalSpacing
        stackView.alignment = .fill
        stackView.spacing = 0
        addSubview(stackView)
    }

    override func configWatermarkModel(_ watermarkModel: WmcWatermarkDetailModel, styleMode: WmcBaseWatermarkTemplateView.StyleMode) {
        super.configWatermarkModel(watermarkModel, styleMode: styleMode)
        
        timeLabel.styleMode = styleMode
        if let staticDate = watermarkModel.staticData.staticDate, styleMode.isStatic {
            timeLabel.updateDate(staticDate)
        }
        
        let alpha = calculateAlpha(watermarkModel.alpha)
        backgroundColorView.alpha = alpha
        
        var drawViews: [UIView] = []
        // 获取标题最大字数
        let maxTitleCount = watermarkModel.fieldTitleMaxCount
        watermarkModel.fields.forEach { option in
            guard option.isOpen else { return }
            switch option.fieldType {
            case .title: // 标题
                titleLabel.text = option.content
                // 标题色和线色图片色统一
                titleLabel.textColor = option.uiTextColor(.wmc_yellow_FFC400)
                leftLineView.backgroundColor = titleLabel.textColor
                rightLineView.backgroundColor = titleLabel.textColor

            case .time: // 时间
                let item = createDateItem(option: option,
                                          styleMode: styleMode,
                                          staticDate: watermarkModel.staticData.staticDate,
                                          maxTitleCount: maxTitleCount,
                                          dateFormat: .yyyy_MM_dd_week)
                item.backgroundColor = option.uiBgColor.yp.alpha(alpha)
                drawViews.append(item)

            case .addr: // 地点
                let item = createLocationItem(option: option,
                                              styleMode: styleMode,
                                              staticAddress: watermarkModel.staticData.drawStaticAddress,
                                              maxTitleCount: maxTitleCount,
                                              locationFormat: .location)
                item.backgroundColor = option.uiBgColor.yp.alpha(alpha)
                drawViews.append(item)

            case .lat: // 经纬
                let item = createLocationItem(option: option,
                                              styleMode: styleMode,
                                              staticAddress: watermarkModel.staticData.drawStaticAddress,
                                              maxTitleCount: maxTitleCount,
                                              locationFormat: .longitudLatitude)
                item.backgroundColor = option.uiBgColor.yp.alpha(alpha)
                drawViews.append(item)

            case .weather: // 天气
                let item = createWeatherItem(option: option,
                                             styleMode: styleMode,
                                             staticWeater: watermarkModel.staticData.staticWeater,
                                             maxTitleCount: maxTitleCount,
                                             weatherFormat: .weatherTemperature)
                item.backgroundColor = option.uiBgColor.yp.alpha(alpha)
                drawViews.append(item)

            case .altitude: // 海拔
                let item = createAltitudeItem(option: option,
                                              styleMode: styleMode,
                                              staticLocation: watermarkModel.staticData.staticLocation,
                                              maxTitleCount: maxTitleCount,
                                              altitudeFormat: .meters)
                item.backgroundColor = option.uiBgColor.yp.alpha(alpha)
                drawViews.append(item)

            case .azimuth: // 方位角
                let item = createAzimuthItem(option: option,
                                             styleMode: styleMode,
                                             staticAzimuth: watermarkModel.staticData.staticAzimuth,
                                             maxTitleCount: maxTitleCount,
                                             azimuthFormat: .default)
                item.backgroundColor = option.uiBgColor.yp.alpha(alpha)
                drawViews.append(item)

            case .decibe: // 分贝
                let item = createDecibeItem(option: option,
                                            styleMode: styleMode,
                                            maxTitleCount: maxTitleCount,
                                            decibeFormat: .describeDB)
                item.backgroundColor = option.uiBgColor.yp.alpha(alpha)
                drawViews.append(item)

            case .speed: // 速度
                let item = createSpeedItem(option: option,
                                           styleMode: styleMode,
                                           staticLocation: watermarkModel.staticData.staticLocation,
                                           maxTitleCount: maxTitleCount,
                                           speedFormat: .km_h)
                item.backgroundColor = option.uiBgColor.yp.alpha(alpha)
                drawViews.append(item)

            case .remark,
                 .record,
                 .text,
                 .custom: // 备注、记工、输入
                let item = createDefaultTextItem(option: option,
                                                 maxTitleCount: maxTitleCount)
                item.backgroundColor = option.uiBgColor.yp.alpha(alpha)
                drawViews.append(item)

            case .brand: // 品牌图
                configOptionBrand(option)

            default: break
            }
        }

        // 添加进堆栈视图
        stackView.yp.arrangedSubviews = drawViews
    }

    override func makeConstraints() {
        super.makeConstraints()

        backgroundColorView.snp.makeConstraints { make in
            make.top.left.equalTo(8)
            make.right.equalTo(-8)
            if isShowCertificationWatermark {
                make.bottom.equalTo(certificationView.snp.top).offset(-4)
            } else {
                make.bottom.equalToSuperview().offset(-8)
            }
        }

        titleLabel.snp.makeConstraints { make in
            make.top.equalTo(12)
            make.height.equalTo(23)
            make.centerX.equalToSuperview()
        }

        leftLineView.snp.makeConstraints { make in
            make.size.equalTo(CGSize(width: 16, height: 1))
            make.centerY.equalTo(titleLabel)
            make.right.equalTo(titleLabel.snp.left).offset(-8)
        }

        rightLineView.snp.makeConstraints { make in
            make.size.equalTo(leftLineView)
            make.centerY.equalTo(leftLineView)
            make.left.equalTo(titleLabel.snp.right).offset(8)
        }

        centerLineView.snp.makeConstraints { make in
            make.left.right.equalTo(backgroundColorView)
            make.top.equalTo(titleLabel.snp.bottom).offset(4)
            make.height.equalTo(3)
        }

        timeBgView.snp.makeConstraints { make in
            make.top.equalTo(centerLineView.snp.bottom).offset(6)
            make.left.equalTo(18)
            make.right.equalTo(-18)
            make.height.equalTo(40)
        }

        lineView.snp.makeConstraints { make in
            make.centerX.centerY.equalToSuperview()
            make.size.equalTo(CGSize(width: 2, height: 22))
        }

        ampmTimeLabel.snp.makeConstraints { make in
            make.top.left.bottom.equalToSuperview()
            make.right.equalTo(lineView.snp.left)
        }

        timeLabel.snp.makeConstraints { make in
            make.left.equalTo(lineView.snp.right)
            make.right.equalToSuperview()
            make.top.bottom.equalToSuperview()
        }

        stackView.snp.makeConstraints { make in
            make.top.equalTo(timeBgView.snp.bottom).offset(6)
            make.left.right.equalTo(backgroundColorView)
            make.bottom.equalTo(backgroundColorView).offset(-8)
        }
    }
}
